package com.ig507.util;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 最基础的工具类
 */
public class Util {

	/**
	 * 判断一个对象是否为空或者长度为0时返回true，否则返回false String:null或length=0返回true
	 * List,Set,Map:null或size=0返回true 其他null返回true
	 * 
	 * @param o
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public static final boolean isEmpty(Object o) {
		if (null == o) {
			return true;
		}
		if (o instanceof String) {
			return (0 == ((String) o).trim().length());
		}
		if (o instanceof List) {
			return (0 == ((List) o).size());
		}
		if (o instanceof Set) {
			return (0 == ((Set) o).size());
		}
		if (o instanceof Map) {
			return (0 == ((Map) o).size());
		}
		if (o instanceof Object[]) {
			return (0 == ((Object[]) o).length);
		}
		return false;
	}

	/**
	 * 判断一个对象不为null，并且长度不为0时返回true，否则返回false 规则参考Util.isEmpty()
	 * 
	 * @see #isEmpty(Object o)
	 * @param o
	 * @return
	 */
	public static final boolean isNotEmpty(Object o) {
		return !isEmpty(o);
	}

	/**
	 * 只要其中一个对象是empty，返回true，否则返回false
	 * 
	 * @param o
	 * @return
	 */
	public static final boolean isAnyEmpty(Object... o) {
		for (int i = 0; i < o.length; i++) {
			Object obj = o[i];
			if (Util.isEmpty(obj)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 所有对象都不为empty，返回true，否则返回false
	 * 
	 * @param o
	 * @return
	 */
	public static final boolean isNotAnyEmpty(Object... o) {
		return !isAnyEmpty(o);
	}

	/**
	 * 和javaScript的数组的join方法作用一样，主要用于将数组的元素用指定的连接字符相连成一行字符串，
	 * 放在searchParams中的IN参数中进行查询，如["a", "b", 1]→"a,b,1"
	 * 
	 * @param array
	 * @param joinStr
	 *            链接字符串，可以是单个字符，也可以是多个字符的字符串，也可以是空串。
	 * @return
	 */
	public static <T> String join(List<T> array, String joinStr) {
		if (Util.isEmpty(array)) {
			return "";
		} else {
			StringBuffer sb = new StringBuffer("");
			for (T o : array) {
				String val = "";
				if (Util.isNotEmpty(o)) {
					val = o.toString();
				}
				sb.append(val + joinStr);
			}
			if (Util.isNotEmpty(sb.toString())) {
				return sb.toString().substring(0, sb.toString().length() - joinStr.length());
			}
		}
		return "";
	}

}
